package com.easy.frame.common.process.core.factory;

import java.io.Serializable;

/**
 * 流程工厂
 *
 * @author zzf
 * @date 2021/3/25 14:56
 */
public interface ProcessFactory {

    /**
     * 启动流程
     *
     * @param processDefineName
     * @param targetInfoId
     */
    void startProcess(String processDefineName, Serializable targetInfoId);


    /**
     * 执行到该节点并给该节点的人发消息
     *
     * @param processExecuteId 流程执行对象id
     * @param runPointNum      节点数
     */
    void executeNodeAndSendMsg(Serializable processExecuteId, int runPointNum);

    /**
     * 通过指定节点
     *
     * @param processExecuteUserId 流程执行人对象id
     * @param currentPointNum      当前节点数
     * @param message              回复消息
     */
    void pass(Serializable processExecuteUserId, int currentPointNum, String message);

    /**
     * 驳回流程
     *
     * @param processExecuteUserId 流程执行人对象id
     * @param currentPointNum      当前节点数
     * @param message              回复消息
     */
    void reject(Serializable processExecuteUserId, int currentPointNum, String message);

    /**
     * 驳回流程到指定节点
     *
     * @param processExecuteUserId 流程执行人对象id
     * @param currentPointNum      当前节点数
     * @param rejectToPointNum     驳回到的节点数
     * @param message              回复消息
     */
    void rejectToPointNum(Serializable processExecuteUserId, int currentPointNum, int rejectToPointNum, String message);

}
